package domain.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Pattern;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.jsr107cache.Cache;
import net.sf.jsr107cache.CacheException;
import net.sf.jsr107cache.CacheManager;

import domain.data.QnAPersistenceManager;
import domain.model.Domain;
import domain.model.InOutLink;
import domain.model.TrackIp;
import domain.model.Whois;
import domain.service.AgeDomain;
import domain.service.AlexaUpdate;

import domain.service.CheckRobotSitemap;
import domain.service.GooglePageRank;
import domain.service.Ip;
import domain.service.SelfSiteUpdate;
import domain.service.Utils;

@SuppressWarnings("serial")
public class SearchDomainServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
//		resp.setContentType("text/plain");
//		resp.setCharacterEncoding("utf-8");
//		PersistenceManager psm = QnAPersistenceManager.get().getPersistenceManager();
		Date date_cache = new Date(new Date().getTime()+60*60*1000);
		String referer = req.getHeader("referer"); 
		resp.setHeader( "Cache-Control", "public, max-age=30");
//		resp.setHeader( "Expires", date_cache.toGMTString() );
//		
//		String title_url = Utils.fomatDomain(req.getParameter("name"));
//		
//		if(referer == null || (referer!=null && !Pattern.matches("^http://[^&]+&url=[\\w\\W]+", referer)))
//		{
//			if(title_url != null && title_url.length() > 0)
//			{			
//				Query query = psm.newQuery(Domain.class);
//				query.setFilter("name=='"+title_url+"'");
//				@SuppressWarnings("unchecked")
//				List<Domain> domains = (List<Domain>) query.execute();
//				if(domains.size()>0)
//				{
//					if(domains.get(0).getSex()==9)
//					{
//						resp.sendError(resp.SC_NOT_FOUND,"Content removed because our policy !");
//					} else {
//						Cache cache=null;
//			
//				        try {
//				            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
//				        } catch (CacheException e) {
//				           e.printStackTrace();
//				           
//				        }
//				        if(cache.containsKey("lastPing"))
//				        {
//				        	@SuppressWarnings("unchecked")
//							ArrayList<String> lastPing = (ArrayList<String>)cache.get("lastPing");
//				        	if(lastPing.size()>19)
//				        	{
//				        		lastPing.remove(0);
//				        		
//				        		
//				        	}
//				        	if(!lastPing.contains(domains.get(0).getName()))
//				        	lastPing.add(domains.get(0).getName());
//				        	cache.put("lastPing", lastPing);
//				        	
//				        }
//				        else
//				        {
//				        	
//				        	ArrayList<String> lastPing = new ArrayList<String>();
//				        	if(!lastPing.contains(domains.get(0).getName()))
//				        	lastPing.add(domains.get(0).getName());
//				        	cache.put("lastPing", lastPing);
//				        }
//						
//				        if(domains.get(0).getGoogleAdsense()!=null&&domains.get(0).getGoogleAdsense().trim().length()>0)
//				        {
//				        	Query query8 = psm.newQuery(Domain.class);
//				        	query8.setFilter("googleAdsense == '"+domains.get(0).getGoogleAdsense()+"'");
//				        	query8.setRange(0,15);
//				        	@SuppressWarnings("unchecked")
//							List<Domain> sameAds=  (List<Domain>)query8.execute();
//				        	if(sameAds.size() > 0)
//				        	req.setAttribute("sameAds", domain.service.Utils.convert2DomainString( sameAds));
//				        }
//				        
//				        if(domains.get(0).getGoogleAnalytic()!=null&&domains.get(0).getGoogleAnalytic().trim().length()>0)
//				        {
//				        	Query query9 = psm.newQuery(Domain.class);
//				        	query9.setFilter("googleAnalytic == '"+domains.get(0).getGoogleAnalytic()+"'");
//				        	query9.setRange(0,15);
//				        	@SuppressWarnings("unchecked")
//							List<Domain> sameAnalytic=  (List<Domain>)query9.execute();
//				        	if(sameAnalytic.size() > 0)
//				        	req.setAttribute("sameAnalytic", domain.service.Utils.convert2DomainString( sameAnalytic));
//				        }
//						
//				        if(domains.get(0).getIp()!=null&&domains.get(0).getIp().trim().length()>0)
//				        {
//				        	String[] listIp = domains.get(0).getIp().split("\n");
//				        	String sameip = "";
//				        	for(int i=0;i<listIp.length;i++)
//							{
//								PersistenceManager psms = QnAPersistenceManager.get().getPersistenceManager();
//								@SuppressWarnings("unchecked")
//								List<TrackIp> listDomain=  (List<TrackIp>)psms.newQuery(TrackIp.class,"ip == '"+listIp[i]+"'").execute();
//								if(listDomain.size() > 0)
//								{
//									sameip += "<li><div class=\"left detail_left\">"+listIp[i]+"</div><div class=\"left detail_right\">"+listDomain.get(0).getDomainStrings().replaceAll("[ ]+[,]+[ ]+$","")+"</div></li>";
//								}
//							}
//					        req.setAttribute("sameip",sameip);
//				        }
//				        
//						Query query2 = psm.newQuery(InOutLink.class);
//						query2.setFilter("inLink =='"+title_url+"'");
//						query2.setRange(0,5);
//						@SuppressWarnings("unchecked")
//						List<InOutLink> outlink = (List<InOutLink>) query2.execute();
//						req.setAttribute("outlink", outlink);
//						
//						Query query3 = psm.newQuery(InOutLink.class);
//						query3.setFilter("outLink =='"+title_url+"'");
//						query3.setRange(0,5);
//						@SuppressWarnings("unchecked")
//						List<InOutLink> inlink = (List<InOutLink>) query3.execute();
//						req.setAttribute("inlink", inlink);
//						
//						req.setAttribute("domain", domains.get(0));
//						
//						Query query4 = psm.newQuery(Whois.class);
//						query4.setFilter("name=='"+title_url+"'");
//						@SuppressWarnings("unchecked")
//						List<Whois> whois = (List<Whois>) query4.execute();
//						req.setAttribute("whois", whois);
//						
//						Query query5 = psm.newQuery(Domain.class);
//						query5.setFilter("domain=='"+Utils.returnDomain(title_url)+"' && name != '"+title_url+"'");
//						query5.setRange(0,30);
//						@SuppressWarnings("unchecked")
//						List<Domain> otherDomain = (List<Domain>) query5.execute();
//						req.setAttribute("otherDomain", otherDomain);
//						
//						if(domains.get(0).getSex() == 1)
//						{
//							req.setAttribute("title", domains.get(0).getName());
//							req.setAttribute("description", "A Free SEO tool that provides free website analysis, traffic details, rankings, contact email ,similar site, same owner site , same ip site, optimization and promotion reports.");
//							req.setAttribute("keyword", "Domain name information,  Server information, Web site analysis, website traffic details, Website backlinks website IP, website ranking info");
//						} else {
//							String t = (domains.get(0).getTitle()!=null)?domains.get(0).getTitle():"";
//							req.setAttribute("title", Utils.returnDomain(title_url)+" "+domains.get(0).getName()+ " " +t);
//							String des = (domains.get(0).getDescription()!=null)?domains.get(0).getDescription().getValue():""+"."+domains.get(0).getPopularKeywordToString()+"."+domains.get(0).getKeywordToString();
//							if(des.length() > 250)
//							{
//								des = des.substring(0,250);
//							}
//							String key = domains.get(0).getName()+","+domains.get(0).getPopularKeywordToString()+"."+domains.get(0).getKeywordToString()+",Domain name information,  Server information, Web site analysis, website traffic details, Website backlinks website IP, website ranking info";
//							if(key.length() > 250)
//							{
//								key = key.substring(0,250);
//							}
//							req.setAttribute("description", des);
//							req.setAttribute("keyword", key);
//						}
//						
//						try {
//							req.getRequestDispatcher("/detail.jsp").forward(req, resp);
//						} catch (ServletException e) {
//							// TODO Auto-generated catch block
//							e.printStackTrace();
//						}
//					}
//				} else {
//					if(Utils.checkDomain(title_url))
//					{
//						Domain domain = new Domain();
//						domain.setName(title_url);
//						
//						try {
//							new AgeDomain(domain);
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						try {
//							new AlexaUpdate(domain);
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						try {
//							new GooglePageRank(domain);
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						try {
//							new Ip(domain);
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						try {
//							new domain.service.Whois(domain.getName());
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						try {
//							new SelfSiteUpdate(domain);
//						} catch (Exception e) {
//							// TODO: handle exception
//						}
//						if(domain.getDescription()!= null && domain.getDescription().getValue().equals("") || domain.getDescription() ==  null)
//					    {
//					    	domain.setName("www."+domain.getName());
//					    	try {
//					    		new SelfSiteUpdate(domain);
//							} catch (Exception e) {
//								// TODO: handle exception
//							}
//						    domain.setName(title_url);
//					    }
//						psm.currentTransaction().begin();
//						psm.makePersistent(domain);
//						psm.currentTransaction().commit();
//		
//						Cache cache=null;
//						
//				        try {
//				            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
//				        } catch (CacheException e) {
//				           e.printStackTrace();
//				           
//				        }
//				        
//				        String[] bisi = new String[4];	
//				        bisi[0] = domain.getName();
//				        bisi[1] = domain.getTitle();
//		
//				        if(domain.getDescription() != null)
//				        	bisi[2] = domain.getDescription().getValue();
//				        else 
//				        	bisi[2] = domain.getName();
//				        if(domain.getLastUpdateDate() != null)
//			        		bisi[3] = domain.getLastUpdateDate().toGMTString();
//			        	else
//			        		bisi[3] = new Date().toGMTString();
//				        if(cache.containsKey("lastPings"))
//				        {
//				        	@SuppressWarnings("unchecked")
//							ArrayList<String[]> lastPing = (ArrayList<String[]>)cache.get("lastPings");
//				        	if(lastPing.size()>8)
//				        	{
//				        		lastPing.remove(0);
//				        	}
//				        	int check = 0;
//				        	for (int i = 0; i < lastPing.size(); i++) {
//								if(lastPing.get(i)[0] != null && lastPing.get(i)[0].equals(bisi[0]))
//								{
//									check = 1;
//								}
//							}
//				        	if(check == 0)
//				        		lastPing.add(bisi);
//				        		cache.put("lastPings", lastPing);
//				        	
//				        }
//				        else
//				        {
//				        	ArrayList<String[]> lastPing = new ArrayList<String[]>();
//				        	lastPing.add(bisi);
//			        		cache.put("lastPings", lastPing);
//				        }
//						
//				        String update = req.getParameter("update");
//						if(update==null)
//							resp.sendRedirect("/domain/"+title_url+"?update=true");
//						else
//							resp.getWriter().println("Domain "+title_url+" does not exit");
//					} else {
//						resp.getWriter().println("Domain "+title_url+" does not exit");
//					}
//				}
//			}else {
//	        	resp.sendError(resp.SC_NOT_FOUND,"PAGE NOT FOUND !");
//	        }
//		} else {
//	    	resp.sendError(resp.SC_NOT_FOUND,"PAGE NOT FOUND !");
//	    }
	} 
}
